package com.fcscs.cservice.domain.validator;

import java.util.Date;

import com.fcscs.core.common.ErrorEnums;
import com.fcscs.core.domain.validator.BaseValidator;
import com.fcscs.cservice.common.CServiceCommonEnums.VersionTypeEnum;
import com.fcscs.cservice.common.CServiceErrorEnums;
import com.fcscs.cservice.domain.VersionUpdates;
import com.fcscs.cservice.domain.Versions;

public interface VersionValidators {

	public class VersionUpdatesValidator extends BaseValidator<VersionUpdates> {
		public ErrorEnums validate(VersionUpdates ver, boolean newInstance) {
			ErrorEnums err = super.validate(ver, newInstance);
			if (err != null) {
				return err;
			} else {
				if (ver.getModuleEnum() == null) {
					return ErrorEnums.GeneralError.REQURIED_FLD_MISSING;
				}
			}
			return null;
		}
	}

	public static class VersionsValidator extends BaseValidator<Versions> {
		public ErrorEnums validate(Versions ver, boolean newInstance) {
			ErrorEnums err = super.validate(ver, newInstance);
			if (err != null) {
				return err;
			} else {
				if (ver.getModuleEnum() == null || ver.getVersionTypeEnum() == null) {
					return ErrorEnums.GeneralError.REQURIED_FLD_MISSING;
				}
				if (VersionTypeEnum.TEMPLATE.equals(ver.getVersionTypeEnum()) && (ver.getTemplateName() == null
						|| "".equals(ver.getTemplateName().trim()))) {
					return ErrorEnums.GeneralError.REQURIED_FLD_MISSING;
				}
				if (VersionTypeEnum.SCHEDULED.equals(ver.getVersionTypeEnum())) {
					if (ver.getStartDate() == null) {
						return ErrorEnums.GeneralError.REQURIED_FLD_MISSING;
					} else if (ver.getStartDate().before(new Date())) {
						return CServiceErrorEnums.CommonEnums.INVALID_VALUE;
					}
				}
			}
			return null;
		}
	}
}
